Programmable electronic systems require both hardware and software to function. The hardware may take many forms, including, for example, microprocessors, micro-controllers, and digital signal processors (hereafter collectively referred to as processors) which are used to execute machine code commands (hereafter referred to as instructions). Software consists of specific sequences of instructions which control the hardware to carry out the desired function. Software is usually provided in a textual form written in one of several programming languages.
Although many electronic systems require both processors and software to operate, the development processes for hardware and software have traditionally been independent of each other. Indeed, the general practice has been that software was not written for a particular piece of hardware until working prototypes of the hardware were created. The independent development cycles for software and hardware create many problems. First, this model for developing an electronic system adds significantly to the overall development time. This is the case because software developers cannot commence software development until a working prototype is available for testing the software programs. Second, this model is error prone. If a design or process defect is found in the processor, then the software development is further delayed until either the defect is corrected and a new prototype is made available, or the software is modified to work around the hardware flaw. Third, this model generally excludes software designers from having any input during the hardware design process. This is problematic because decisions made by hardware designers frequently impact the efficiency of the machine code generated by the software tools. The ability of software developers to provide input during the hardware design process can greatly improve the speed and efficiency of the system.
In recent years, the electronic systems industry has begun to look for new techniques, processes and protocols to reduce the development cycle for both the hardware and the software. This is largely a result of the shortened useful life of most electronic systems. In today's economy, many electronic systems become obsolete within a few years after introduction into the market. This shortening of the useful life of electronic systems is a result of what is commonly known in the industry as Moore's law. According to Moore's law, the number of transistors per microprocessor (a rough measure of the computing power of a microprocessor) doubles every 2.3 years. Moore's law dictates that new and more powerful microprocessors will enter the market very quickly. Accordingly, it is imperative for hardware and software developers to introduce products into the market as quickly as possible. The electronic systems industry, however, has not kept up with Moore's law because the technology needed for software development tools to keep was not available.
As a result of these market pressures, software and hardware developers have begun collaborating in the development process in an attempt to begin the software development process earlier in the development cycle. This collaboration process is known in the industry as hardware/software co-development.
The shift in the industry towards co-development has created the demand for unique development tools. One of these development tools is a hardware simulator. Since software developers no longer have the luxury of waiting for a prototype processor on which to test programs, software must now be tested on simulators. Hardware simulators utilize an existing host system in conjunction with software techniques that make it function like the processor under development. These simulators can be modeled at many different levels of generality. The lowest level of generality is the gate-level simulator. The gate-level simulator models a processor on a logic gate level so that the simultaneous on/off status of each gate can be monitored. Gate-level simulators are, therefore, very accurate because of the ability to model the electrical structure of the processor. The tradeoff of gate-level accuracy is speed. Gate-level simulators often operate several orders of magnitude slower than the actual hardware, often at only a few hundred instructions per second. The slow simulation speed of this type of simulator makes it impractical for use by software developers. On the other hand, Instruction Set Architecture (ISA) simulators emulate processors at much greater speeds by modeling them at a far higher level. By using a higher level of generality, ISA simulators can run at speeds which are much closer to the actual speed of the modeled hardware, given a host system of sufficient computing power.
Another tool important to programmers are assemblers. Assemblers convert hardware-specific low-level languages called assembly language, into machine code.
These tools are essential to software developers for the creation of efficient software programs. Indeed, programs cannot be executed until converted into machine code for the specific processor upon which they are intended to run.
Presently, development tools are made by a process which is very slow and requires a tremendous amount of manpower and expertise. Furthermore, the development tools that are presently available are created specifically for a particular processor. This is currently accomplished using brute force methods by obtaining an English description of the processor's behavior, then manually creating the development tools based on this crude and often inaccurate description. As a result of this process, development tools can take an excessive amount of time to create and frequently are very inefficient.
Therefore, a need exists for an expedient, more accurate system and method for creating useful development tools from the same specification used to produce the processor, thereby eliminating the error prone manual steps inherent in the processes currently in use. The present invention solves the foregoing problems by creating processor specific development tools quickly and efficiently from machine descriptions.